/*************************************************
  折线图绘制
  author 周翔
  2012-8-14

  对外提供接口

   void showData(int data);接受外部的折线数据
   void setSingleUnitX(const int &value);设置x轴的单位像素
   void startUpdataTimer(int msecond);定时器更新折线图
   void stopUpdataTimer();关闭定时器

  *************************************************/

#ifndef LINEGRAPHWIDGET_H
#define LINEGRAPHWIDGET_H

#include <QWidget>
#include <QPen>
#include <QPainter>
#include <QResizeEvent>
//#include <QDebug>
#include <QTimer>

struct point
{
    int x;
    int y;
};

class LineGraphWidget : public QWidget
{
    Q_OBJECT
public:
    //mix和max为折线的y轴的数据范围
    explicit LineGraphWidget(int min, int max, QWidget *parent = 0);
    void setSingleUnitX(const int &value) {singleUnitX = value;}//设置x轴的一个单位占多少个像素，默认10
    //支持定时器定时更新
    void startUpdataTimer(int msecond);
    void stopUpdataTimer();
signals:
    //支持实时更新
    void newDataCome();//有新数据到来时发出的折线图更新信号
public slots:
    /**
     * @brief showData
     * @param adress 地址
     * @param _data 数据
     */
    void showData(const QString& adress,int _data);//接受来之外部的数据
    /**
     * @brief slt_showData 接受外部数据
     * @param name 设备名
     * @param _data 数据
     */
    void slt_showData(ushort name,int _data);
protected:
    void paintEvent(QPaintEvent *);
    void resizeEvent(QResizeEvent *e);
private:
    QString  m_currentNodeAdress;//当前显示的节点的地址
    ushort m_currentNodeName;//当前节点的设备名

    QList<int> xList;
    QList<int> yList;
    int Counter;



    //窗口的长和宽
    int widgetX;
    int widgetY;
    //折线图的显示范围
    int rangeMin;
    int rangeMax;
    //根据窗口和范围得出的单位长，x轴,y轴
    int singleUnitX;
    int singleUnitY;

    //根据窗口得出的多少个单位,x轴,y轴
    int sumUnitX;
    int sumUnitY;

    point basePoint;//折线图的原点

    point xAxisEndPoint;//X轴的终点

    point yAxisEndPoint;//Y轴的终点

    QTimer *timer;

    void getSumUnitX();
    void getSingleUnitY();

    void initGraph();

    void flush();//数据传入的节点不是现在的当前的节点的时候，刷新画面，清除所有的值


};

#endif // LINEGRAPHWIDGET_H
